# 主要用于使用 fluent 来触发网格划分任务
# 创建一个新的方法 run_meshing_task 来处理网格划分任务：
# 程序运作的第一步， 解析 agdb 文件成 wind.msh.h5 网格文件，便于后续fluent控制求解


def run_meshing_task(self):
    global session  # 确保可以修改全局变量

    # 启动 Fluent 网格划分模式
    session = launch_fluent(precision="double", processor_count=4, mode="meshing")
    self.consoleOutput.append("Fluent 已启动（网格划分模式）")

    # 检查并导入几何体文件
    geom = 'wind.agdb'
    if not os.path.isfile(geom):
        self.consoleOutput.append(f"几何体文件 {geom} 不存在")
        return

    # 初始化工作流
    session.workflow.InitializeWorkflow(WorkflowType="Watertight Geometry")
    
    # 导入几何体文件
    session.workflow.TaskObject["Import Geometry"].Arguments = dict(
        FileName=geom, LengthUnit="mm"
    )
    session.workflow.TaskObject["Import Geometry"].Execute()

    # 添加局部尺寸
    session.workflow.TaskObject["Add Local Sizing"].AddChildToTask()
    session.workflow.TaskObject["Add Local Sizing"].Execute()

    # 生成表面网格
    session.workflow.TaskObject["Generate the Surface Mesh"].AddChildToTask()
    session.workflow.TaskObject["Generate the Surface Mesh"].Execute()

    # 描述几何体
    session.workflow.TaskObject["Describe Geometry"].UpdateChildTasks(
        SetupTypeChanged=False
    )
    session.workflow.TaskObject["Describe Geometry"].Arguments = dict(
        SetupType="The geometry consists of only fluid regions with no voids"
    )
    session.workflow.TaskObject["Describe Geometry"].UpdateChildTasks(SetupTypeChanged=True)
    session.workflow.TaskObject["Describe Geometry"].Execute()

    # 更新边界条件
    session.workflow.TaskObject["Update Boundaries"].Execute()

    # 更新区域
    session.workflow.TaskObject["Update Regions"].Execute()

    # 添加边界层
    session.workflow.TaskObject["Add Boundary Layers"].Execute()

    # 生成体积网格
    session.workflow.TaskObject["Generate the Volume Mesh"].Execute()

    # 检查网格质量
    session.tui.mesh.check_mesh()
    self.consoleOutput.append("网格质量检查完成")

    # 保存网格文件
    output_mesh = "wind.msh.h5"
    session.tui.file.write_mesh(output_mesh)
    self.consoleOutput.append(f"网格文件已保存为 {output_mesh}")

    # 关闭 Fluent 会话
    session.exit()
    self.consoleOutput.append("Fluent 会话已关闭")
